C语言中的 free() 函数理解 | 您所在的位置:网站首页 › fc c语言 › C语言中的 free() 函数理解 |
C语言中的 free() 函数理解
C语言当中 free() 函数与 malloc() 函数应是成对出现的:
malloc() 函数负责空间的申请, malloc() 函数的对头free() 函数则负责将 malloc() 函数申请的空间给释放掉;
#include
#include
#define MALLOC_SIZE 250
int main(void)
{
//申请一段长度为250,类型为 char 的空间
char *pointer = null;
pointer = (char *)malloc( MALLOC_SIZE * sizeof(char) );
//释放空间
if(null != pointer)
{
free( pointer );
pointer = null;
}
return 0;
}
以上是个申请空间又释放掉的显得闲得蛋疼的例子,那问题来了: free() 函数是如何确定要释放空间大小的?free() 函数释放掉的是什么内容呢?指针 pointer 不指向 null 行不行?不判断 null != pointer 是否必要?free( pointer + 1),能否释放?以下为个人的理解: 第一点:申请空间的大小是由用户决定的,系统有基于链表的内存管理,申请得到的空间在物理空间上不一定连续的,但申请到的空间映射出的虚拟空间是连续的,申请空间时,对于系统来说,系统只会关注申请空间的大小,并不关注空间类型,所以申请空间返回的空间也不具有特定的空间类型,只是分配了一段空间供用户使用; malloc函数返回来的是申请到空间的地址,然后用户使用一个指针指向这块空间,便可以使用了;在申请到空间的开始地址前的空间会记录着空间的大小,因此在 free() 释放空间时会先去确认空间的大小,再进行空间释放。 第二点: |
CopyRight 2018-2019 实验室设备网 版权所有 |